home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PsL Monthly 1994 December
/
PSL Monthly Shareware CD-ROM (Public Software Library)(December 1994).bin
/
prgmming
/
dos
/
asm
/
genlmacb.asm
< prev
next >
Wrap
Assembly Source File
|
1985-05-11
|
19KB
|
566 lines
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;
;; ASSEMBLE.MAC ;;
;; ;;
;; SAMPLE MACRO LIBRARY FOR THE IBM PC MACRO ASSEMBLER ;;
;; ;;
;; (C) COPYRIGHT 1983 ;;
;; BY ;;
;; JERRY D. STUCKLE ;;
;; ;;
;; RELEASED TO PUBLIC DOMAIN ;;
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLEAR MACRO R1,R2,R3,R4,R5,R6,R7,R8
;;***************************************************************************;;
;; ;;
;; MACRO: CLEAR ;;
;; ;;
;; DESCRIPTION: CLEAR REGISTERS ;;
;; ;;
;; PARAMATERS: UP TO 8 REGISTERS TO BE CLEARED ;;
;; ;;
;; INPUT: N/A ;;
;; ;;
;; OUTPUT: REQUESTED REGISTERS SET TO BINARY 0'S ;;
;; ;;
;; REGISTERS USED: NONE ;;
;; ;;
;;***************************************************************************;;
IRP RX,<R1,R2,R3,R4,R5,R6,R7,R8> ;REGISTER LIST
IFNB <RX> ;FOR EACH REGISTER IN LIST
XOR RX,RX ;CLEAR THE REGISTER
ENDIF ;END OF IFIDN
ENDM ;END OF IRP
ENDM ;MACRO END
CLS MACRO
LOCAL CLS1,CLSD
;;***************************************************************************;;
;; ;;
;; MACRO: CLS ;;
;; ;;
;; DESCRIPTION: CLEAR THE DISPLAY SCREEN ;;
;; ;;
;; PARAMATERS: NONE ;;
;; ;;
;; INPUT: NONE ;;
;; ;;
;; OUTPUT: NONE ;;
;; ;;
;; REGISTERS USED: AX,DX ;;
;; ;;
;;***************************************************************************;;
DISPLAY CLSD ;DISPLAY THE DOS2 STRING
JMP SHORT CLS1 ;GO AROUND THE STRING DATA
CLSD DB 1BH,'[2J$' ;DATA FOR DOS CALL
CLS1 LABEL NEAR
ENDM
COLOR MACRO FOREGROUND,BACKGROUND
LOCAL COLD,COL1
;;***************************************************************************;;
;; ;;
;; MACRO: COLOR ;;
;; ;;
;; DESCRIPTION: SETS DISPLAY COLOR ;;
;; ;;
;; PARAMATERS: FOREGROUND COLOR, BACKGROUND COLOR ;;
;; ;;
;; INPUT: NONE ;;
;; ;;
;; OUTPUT: NONE ;;
;; ;;
;; REGISTERS USED: AX,DX ;;
;; ;;
;;***************************************************************************;;
DISPLAY COLD ;DISPLAY THE COLOR STRING
JMP SHORT COL1 ;GO AROUND THE STRING
COLD DB 1BH,'[' ;START OF STRING
IFIDN <FOREGROUND>,<NORMAL> ;IF NORMAL REQUEST
DB '0' ;NORMAL FOREGROUND
ELSE
IFIDN <FOREGROUND>,<BOLD> ;IF BOLD REQUEST
DB '1' ;BOLD FOREGROUND
ELSE
IFIDN <FOREGROUND>,<UNDERSCORE> ;IF UNDERSCORED
DB '4' ;UNDERSCORE FOREGROUND
ELSE
IFIDN <FOREGROUND>,<BLINK> ;IF BLINK REQUEST
DB '5' ;BLINK FOREGROUND
ELSE
IFIDN <FOREGROUND>,<REVERSE> ;IF REVERSE REQUEST
DB '7' ;REVERSE VIDEO
ELSE
IFIDN <FOREGROUND>,<INVISIBLE> ;IF INVISABLE REQUEST
DB '8' ;INVISABLE (NO-SHOW)
ELSE
IFIDN <FOREGROUND>,<BLACK> ;IF BLACK REQUEST
DB '30' ;BLACK FOREGROUND
ELSE
IFIDN <FOREGROUND>,<RED> ;IF RED REQUEST
DB '31' ;RED FOREGROUND
ELSE
IFIDN <FOREGROUND>,<GREEN> ;IF GREEN REQUEST
DB '32' ;GREEN FOREGROUND
ELSE
IFIDN <FOREGROUND>,<YELLOW> ;IF YELLOW REQUEST
DB '33' ;YELLOW FOREGROUND
ELSE
IFIDN <FOREGROUND>,<BLUE> ;IF BLUE REQUEST
DB '34' ;BLUE FOREGROUND
ELSE
IFIDN <FOREGROUND>,<MAGENTA> ;IF MAGENTA REQUEST
DB '35' ;MAGENTA FOREGROUND
ELSE
IFIDN <FOREGROUND>,<CYAN> ;IF CYAN REQUEST
DB '36' ;CYAN FOREGROUND
ELSE
IFIDN <FOREGROUND>,<WHITE> ;IF WHITE REQUEST
DB '37' ;WHITE FOREGROUND
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IFNB <FOREGROUND> ;IF WE HAVE FOREGROUND...
IFNB <BACKGROUND> ;AND BACKGROUND COLORS
DB ';' ;PUT IN A SEPERATOR
ENDIF
ENDIF
IFIDN <BACKGROUND>,<BLACK> ;IF BLACK REQUEST
DB '40' ;BLACK BACKGROUND
ELSE
IFIDN <BACKGROUND>,<RED> ;IF RED REQUEST
DB '41' ;RED BACKGROUND
ELSE
IFIDN <BACKGROUND>,<GREEN> ;IF GREEN REQUEST
DB '42' ;GREEN BACKGROUND
ELSE
IFIDN <BACKGROUND>,<YELLOW> ;IF YELLOW REQUEST
DB '43' ;YELLOW BACKGROUND
ELSE
IFIDN <BACKGROUND>,<BLUE> ;IF BLUE REQUEST
DB '44' ;BLUE BACKGROUND
ELSE
IFIDN <BACKGROUND>,<MAGENTA> ;IF MAGENTA REQUEST
DB '45' ;MAGENTA BACKGROUND
ELSE
IFIDN <BACKGROUND>,<CYAN> ;IF CYAN REQUEST
DB '46' ;CYAN BACKGROUND
ELSE
IFIDN <BACKGROUND>,<WHITE> ;IF WHITE REQUEST
DB '47' ;WHITE BACKGROUND
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
COL1 LABEL NEAR ;SKIP AROUND DATA
ENDM
CURSOR MACRO FUNCTION,AREA
;;***************************************************************************;;
;; ;;
;; MACRO: CURSOR ;;
;; ;;
;; DESCRIPTION: SAVE OR SET CURRENT CURSOR TYPE, BLANK CURSOR ON SCREEN ;;
;; ;;
;; PARAMATERS: FUNCTION (SAVE,SET OR ERASE), DATA OR DATA ADDRESS ;;
;; ;;
;; INPUT: CURSOR START AND END LINES (SET ONLY) ;;
;; ;;
;; OUTPUT: CURSOR START AND END LINES (SAVE ONLY) ;;
;; ;;
;; REGISTERS USED: AX,CX (DS USED AND RESTORED) ;;
;; ;;
;;***************************************************************************;;
IFIDN <FUNCTION>,<ERASE> ;IF CURSOR ERASE REQUESTED
MOV AH,1 ;SET CURSOR MODE
MOV CX,0F0FH ;START AND END ON LINE 15
INT 10H ;GO DO A VIDEO INTERRUPT
ELSE
IFIDN <FUNCTION>,<SAVE> ;IF CURSOR SAVE REQUEST
PUSH DS ;SAVE DS
MOV AX,40H ;GET SEGMENT 40H IN AX
MOV DS,AX ;AND PUT IT IN DS
MOV CX,DS:60H ;GET CURRENT CURSOR MODE
POP DS ;RESTORE DS
MOV AREA,CX ;AND MOVE CURSOR MODE TO AREA
ELSE
IFIDN <FUNCTION>,<SET> ;IF CURSOR SET REQUEST
MOV CX,AREA ;GET CURSOR MODE IN CX
MOV AH,1 ;SET CURSOR MODE
INT 10H ;GO DO VIDEO INTERRUPT
ENDIF
ENDIF
ENDIF
ENDM
CVD MACRO DEST,ORG
LOCAL CVBP,CVDE
;;***************************************************************************;;
;; ;;
;; MACRO: CVD ;;
;; ;;
;; DESCRIPTION: CONVERT BINARY NUMBER TO ASCII DECIMAL NUMBER ;;
;; ;;
;; PARAMATERS: OUTPUT LABEL, INPUT LABEL ;;
;; ;;
;; INPUT: WORD BINARY NUMBER ;;
;; ;;
;; OUTPUT: 4 BYTE DECIMAL NUMBER ;;
;; ;;
;; REGISTERS USED: AX,BX,DX,DI ;;
;; ;;
;;***************************************************************************;;
IFDIF <ORG>,<AX> ;IF BINARY VALUE NOT IN AX
MOV AX,WORD PTR ORG ;MOVE ORIGIN TO AX
ENDIF
LEA DI,DEST ;GET ADDRESS OF DESTINATION
MOV BL,100D ;DIVISOR TO BL
DIV BL ;DIVIDE BY 100
MOV BH,AH ;SAVE REMAINDER IN BH
CALL CVDP ;CONVERT HIGHORDER TO DECIMAL
MOV AL,BH ;GET REMAINDER
CALL CVDP ;CONVERT LOW ORDER TO DECIMAL
JMP SHORT CVDE ;JUMP AROUND PROC
CVDP PROC NEAR
AAM ;CONVERT TO PACKED DECIMAL
OR AX,3030H ;CONVERT TO ASCII
MOV [DI],AH ;STORE HIGH ORDER BYTE
INC DI ;POINT TO NEXT BYTE
MOV [DI],AL ;STORE LOW ORDER BYTE
INC DI ;POINT